﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIA.HwAccess;

namespace SIA.HwMonitors
{
    /// <summary>Form di scrittura valore su un segnale</summary>
    public partial class frmWriteValue : Form
    {
        //Segnale su cui scrivere
        IHwSignal _signal;

        /// <summary>Costruttore generico</summary>
        /// <param name="signal"></param>
        public frmWriteValue(IHwSignal signal)
        {
            _signal = signal;

            InitializeComponent();
        }

        //evento data change cololo la stringa
        private void tbValue_TextChanged(object sender, EventArgs e)
        {
            int  input = 0;
            if (int.TryParse(tbValue.Text, out input))
            {
                // Numero ok
                tbValue.ForeColor = Color.Black;
            }
            else
            {    // Numero non intero
                tbValue.ForeColor = Color.Red;
            }            
        }

        //esco se perdo il focus
        private void tbValue_Leave(object sender, EventArgs e)
        {
            this.Hide();
        }

        //Evento key down
        private void tbValue_KeyDown(object sender, KeyEventArgs e)
        {
            //Esco se premo esc
            if (e.KeyCode == Keys.Escape) this.Hide();

            //Provo a scrivere se premo enter
            if (e.KeyCode == Keys.Enter)
            {
                //Provo il parse della stringa
                int input = 0;
                if (int.TryParse(tbValue.Text, out input))
                {
                    //Il segnale è un intero
                    if (_signal.Value is IIntegerSignal )
                        ((IIntegerSignal)_signal).IntValue = input;

                    //il segnale è un booleano
                    if (_signal.Value is IDigitalSignal )
                        ((IDigitalSignal)_signal).DigitalValue  = (input != 0);

                    //esco
                    this.Hide();
                }
            }

        }

    }
}
